package com.wrs.androidkeepalive.service

import android.app.job.JobInfo
import android.app.job.JobParameters
import android.app.job.JobScheduler
import android.app.job.JobService
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import com.wrs.androidkeepalive.utils.ServiceUtils


class KeepAliveJobService: JobService() {
    var tag = "keepalive KeepAliveJobService"
    override fun onStartJob(params: JobParameters?): Boolean {
        Log.e(tag, "JobService onStartJob 开启");

        var extras = params?.getExtras();
        var value = extras?.getString("KEY");

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            // 如果当前设备大于 7.0 , 延迟 5 秒 , 再次执行一次
            startJob(this);
        }

        // 判定本地前台进程是否正在运行
        var isLocalServiceRunning =
        ServiceUtils.isServiceRunning(this, LocalForegroundService::class.java.getName());
        if (!isLocalServiceRunning){
            startService( Intent(this, LocalForegroundService::class.java));
        }

        // 判定远程前台进程是否正在运行
        var isRemoteServiceRunning =
        ServiceUtils.isServiceRunning(this, RemoteForegroundService::class.java.getName());
        if (!isRemoteServiceRunning){
            startService( Intent(this, RemoteForegroundService::class.java));
        }


        return false
    }

    override fun onStopJob(p0: JobParameters?): Boolean {
       return false
    }

    companion object {
        fun startJob( context: Context){
            // 创建 JobScheduler
            var jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler

            // 第一个参数指定任务 ID
            // 第二个参数指定任务在哪个组件中执行
            // setPersisted 方法需要 android.permission.RECEIVE_BOOT_COMPLETED 权限
            // setPersisted 方法作用是设备重启后 , 依然执行 JobScheduler 定时任务
           var jobInfoBuilder =  JobInfo.Builder(10,
                 ComponentName(context, KeepAliveJobService::class.java)
          )

            jobInfoBuilder.setPersisted(true)
            val transientExtras = Bundle()
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                jobInfoBuilder.setTransientExtras(transientExtras)
            }
            val persistableBundle = PersistableBundle()
            persistableBundle.putString("KEY", "VALUE")
            jobInfoBuilder.setExtras(persistableBundle)

            // 7.0 以下的版本, 可以每隔 5000 毫秒执行一次任务
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
                jobInfoBuilder.setPeriodic(5_000);

            }else{
                // 7.0 以上的版本 , 设置延迟 5 秒执行
                // 该时间不能小于 JobInfo.getMinLatencyMillis 方法获取的最小值
                jobInfoBuilder.setMinimumLatency(5_000);
            }

            // 开启定时任务
            jobScheduler.schedule(jobInfoBuilder.build());

        }
    }

}